python中lambda的用法 您所在的位置:网站首页 lambda x:5是什么意思 python中lambda的用法

python中lambda的用法

2024-06-02 20:57| 来源: 网络整理| 查看: 265

1. lambada简单介绍

lambda 在Python编程中使用的频率非常高,我们通常提及的lambda表达式其实是python中的一类特殊的定义函数的形式,使用它可以定义一个匿名函数。即当你需要一个函数,但又不想费神去命名一个函数,这时候,就可以使用 lambda了。 看个例子:

g = lambda x: x+1 # 求 x+1 的和

结果

>>> g(1) 2 >>> g(2) 3

可以这样认为,lambda作为一个表达式,定义了一个匿名函数,上例的代码x为入口参数,x+1为函数体,用函数来表示为:

def g(x): return x+1

以上可以看出,lambda 表达式使得代码更为紧凑,但理解起来却没有定义函数那么看起来直白易懂。因此,关于使不使用 lambda表达式一直存在争议,就看个人选择了。

2. lambda 语法

lambda函数的语法只包含一个语句,如下:

lambda [arg1 [,arg2,.....argn]]:expression

其中,lambda是Python预留的关键字,arg和expression由用户自定义。 代码示例

# 普通python函数 def func(a,b,c): return a+b+c print func(1,2,3) # 结果为 6 # lambda匿名函数 f = lambda a,b,c: a+b+c print f(1,2,3) # 结果为 6 # 在代码:f = lambda a,b,c: a+b+c 中,lambda表示匿名函数, # 冒号 “:”之前的a,b,c表示它们是这个函数的参数。 # 匿名函数不需要return来返回值,表达式本身结果就是返回值。 3. lambda 函数的示例

1. 无参匿名函数:

>>> t = lambda : True # 分号前无任何参数 >>> t() True

等价于下面的def定义的函数

>>> def func(): ... return True ... >>> func() True

2. 带参数匿名函数

>>> lambda x: x**3 # 带有一个参数 >>> lambda x, y, z: x+y+z # 带有多个参数 >>> lambda x, y=3: x*y # 存在默认值的参数

3. 输入任意个数的参数

>>> lambda *z: z # *z传入的是任意个数的参数

4. 输入带键值对的参数

>>> lambda **arg: arg # **arg传入的是带键值对的参数 4. lambda函数的用法 4.1 将函数赋值给一个变量,然后再像一般函数调用 >>> f = lambda x, y, z: x*y*z >>> f(2,3,4) 24 4.2 直接在lambda表达式后面传递实参 >>> (lambda x, y: x if x>y else y)(1, 2) 2 # 判断字符串是否以某个字母开头 >>> print(lambda x: x.startswith('B'))('Bob') True 4.3 将lambda嵌套到普通函数中,lambda函数本身做为return的值

代码示例

>>> def add(n): ... return lambda x: x+n ... >>> f = add(1) >>> f(2) 3

例题1. 字符串拼接

>>> f = (lambda x="I",y="Come",z="Here": x+y+z) >>> f("You") 'YouComeHere'

例题2. 和列表结合使用

>>> L = [lambda x: x**2,\ lambda x: x**3,\ lambda x: x**4] >>> for x in L: ... print x(2) ... 4 8 16

也可以像下面这样调用

>>> print L[0](2) 4

例题3. 和字典结合使用

>>> key = 'B' >>> dic = { 'A': lambda: 2*2,\ ... 'B': lambda: 2*4,\ ... 'C': lambda: 2*6} >>> dic[key]() 8

例题4. 求最小值

>>> lower = lambda x, y: x if x>> lower(1, 2) 1 4.4 将lambda函数作为参数传递给其他函数

1. 结合 map 函数使用

此时lambda函数用于指定对列表中每一个元素的共同操作

代码示例

# 求两个列表元素的和 >>> a = [1,2,3,4] >>> b = [5,6,7,8] >>> list(map(lambda x, y: x+y, a, b)) [6, 8, 10, 12] >>> squares = map(lambda x: x**2, range(5)) >>> list(squares) [0, 1, 4, 9, 16] # 求字符串每个单词的长度 >>> sentence = "Hello World" >>> words = sentence.split() >>> lengths = map(lambda x: len(x), words) >>> list(lengths) [5, 5] # 写成一行: >>> list(map(lambda x:len(x),'Hello World'.split()))

2. 结合filter函数使用

此时lambda函数用于指定过滤列表元素的条件

代码示例

# 筛选偶数 >>> list(filter(lambda x: x%2==0, [1,2,3,4,5,6])) [2, 4, 6] # 等价于下面的列表推导式 >>> l = [x for x in [1,2,3,4,5,6] if x%2==0] >>> l [2, 4, 6] # 选出以 B 开头的名字 >>> names = ['Anne', 'Amy', 'Bob', 'David', 'Carrie', 'Barbara'] >>> name= filter(lambda x: x.startswith('B'), names) >>> list(name) ['Bob', 'Barbara']

3. 和 filter函数和map函数结合使用

代码示例

>>> squares = map(lambda x: x**2, range(10)) >>> filters = filter(lambda x: x>5 and x>> list(filters) [9, 16, 25, 36, 49]

4. 结合sorted函数使用

此时lambda函数用于指定对列表中所有元素进行排序的准则

代码示例

>>> info = [('James',32), ('Alies',20), ('Wendy',25)] >>> sorted(info, key=lambda age:age[1]) # 按照第二个元素,索引为1排序 [('Alies', 20), ('Wendy', 25), ('James', 32)]

5. 结合 reduce函数使用

此时lambda函数用于指定列表中两两相邻元素的结合条件。

代码示例

>>>def add(x, y) : # 两数相加 ... return x + y ... >>> reduce(add, [1,2,3,4,5]) # 计算列表和:1+2+3+4+5 15 >>> reduce(lambda x, y: x+y, [1,2,3,4,5]) # 使用 lambda 匿名函数 15 注意事项

lambda 并不会带来程序运行效率的提高,只会使代码更简洁。

如果可以使用for…in…if来完成的,坚决不用lambda。

如果使用lambda,lambda内不要包含循环,如果有,应定义函数来完成,使代码获得可重用性和更好的可读性。

lambda 是为了减少单行函数的定义而存在的。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有